/*
* vuex的核心管理对象模块
* */
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

//状态对象
const state = {
    time:0         //初始化状态
};

//包含多个更新state函数的对象
const mutations = {
    //增加的mutation
    ADDITION(state){
        state.time++;
    },
    SUBTRACTION(state){
        state.time--;
    },
    EVENADD(state){
        state.time++;
    },
    ASYNCADD(state){
        state.time++
    }

};

//包含多个对应事件回调函数的对象
const actions = {
    addition({commit}){   //这个action传的是一个对象,对象里有一个commit方法,提交mutation,最终导致某一个mutation调用
        commit('ADDITION');
    },
    subtraction({commit}){
        commit('SUBTRACTION');
    },
    //带条件的action
    evenAdd({commit,state}){
        if(state.time %2 ===0){
            commit('EVENADD');
        }
    },
    //异步的action
    asyncAdd({commit}){
        setTimeout(()=>{
            commit('ASYNCADD');
        },1000)
    }
};

//包含多个getter计算属性函数的对象
const getters = {
    sum(state){  //vuex会自动传这个state,不需要我们去传
        return state.time % 2 === 0 ?'偶数':'奇数'
    }
};

export default new Vuex.Store({
    state,//状态对象
    mutations,  //包含多个更新state函数的对象
    actions,   //包含多个对应事件回调函数的对象
    getters   //包含多个getter计算属性函数的对象
})
